#pragma once

#include <stack>
#include <map>
#include <string>
#include "Enum.h"
#include "Options.h"

class Level;
class Player;
class Renderer;
class TextLog;
class Enum;
class Keyboard;
class GameState;
class RecipeManager;
class StringLib;
class Dungeon;
class ObjectDatabase;

void newGame();
void clearGame();
void saveGame();
void loadGame(std::string filename);
void deleteOldGame();

extern Keyboard* g_keyboard;
extern Renderer* g_renderer;
extern Level* g_currentLevel;
extern Player* g_player;
extern Options g_options;
extern TextLog* g_textLog;
extern std::stack<GameMode> g_gameMode;
extern GameState* g_gameState;
extern RecipeManager* g_recipeManager;
extern StringLib* g_stringLib;
extern Dungeon* g_currentDungeon;
extern time_t g_seed;
extern ObjectDatabase* g_objectDatabase;
extern std::map<TypeHierarchy, std::map<int, bool>> g_idDatabase;
extern std::string g_currDirectory;